package com.haixiaoke.saas.role.service;

import com.haixiaoke.saas.common.core.domain.entity.SysMenu;
import com.haixiaoke.saas.role.domain.RoleMenu;

import java.util.List;

/**
 * 企业端角色和菜单关联Service接口
 *
 * @author panda
 * @date 2023-12-29
 */
public interface IRoleMenuService {
    /**
     * 查询企业端角色和菜单关联
     *
     * @param roleId 企业端角色和菜单关联主键
     * @return 企业端角色和菜单关联
     */
    RoleMenu selectBizRoleMenuByRoleId(Long roleId);

    /**
     * 查询企业端角色和菜单关联列表
     *
     * @param roleMenu 企业端角色和菜单关联
     * @return 企业端角色和菜单关联集合
     */
    List<RoleMenu> selectBizRoleMenuList(RoleMenu roleMenu);

    /**
     * 新增企业端角色和菜单关联
     *
     * @param roleMenu 企业端角色和菜单关联
     * @return 结果
     */
    int insertBizRoleMenu(RoleMenu roleMenu);

    /**
     * 修改企业端角色和菜单关联
     *
     * @param roleMenu 企业端角色和菜单关联
     * @return 结果
     */
    int updateBizRoleMenu(RoleMenu roleMenu);

    /**
     * 批量删除企业端角色和菜单关联
     *
     * @param roleIds 需要删除的企业端角色和菜单关联主键集合
     * @return 结果
     */
    int deleteBizRoleMenuByRoleIds(Long[] roleIds);

    /**
     * 删除企业端角色和菜单关联信息
     *
     * @param roleId 企业端角色和菜单关联主键
     * @return 结果
     */
    int deleteBizRoleMenuByRoleId(Long roleId);

    /**
     * 查询菜单使用数量
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    int checkMenuExistRole(Long menuId);

    /**
     * 批量新增角色部门信息
     *
     * @param roleMenuList 角色部门列表
     * @return 结果
     */
    int insertBatchRoleMenu(List<RoleMenu> roleMenuList);

    /**
     * 根据角色id查询菜单权限列表
     *
     * @param roleId
     * @return
     */
    List<SysMenu> selectMenuByRoleId(Long roleId);

    /**
     * 查询该角色下所有的菜单权限id
     *
     * @param roleId
     * @return
     */
    List<Long> selectMenuIdsByRoleId(Long roleId);

    int deleteBizRoleMenuByMenuId(Long menuId);
}
